package ongd.negocio.sesion;

import ongd.negocio.gestion.ControladorApadrinamiento;
import ongd.negocio.gestion.ControladorConfiguracion;
import ongd.negocio.gestion.ControladorIndice;
import ongd.negocio.gestion.ControladorPadrino;
import ongd.negocio.gestion.ControladorProyectoSC;
import ongd.negocio.gestion.ControladorSocio;
import ongd.negocio.gestion.ControladorUsuario;
import ongd.negocio.gestion.ControladorVoluntario;
import ongd.servicios.persistencia.ControladorPersistencia;

/**
 * Clase que crea todos los controladores de la sesion para poder
 * realizar las operaciones necesarias.
 *
 * @author <a href="mailto:egi0002@alu.ubu.es">Elena García Iglesias</a>
 * @author <a href="mailto:cms0021@alu.ubu.es">Cristina Martínez Sanz</a>
 * @version 1.0 20120124
 *
 */
public class ControladorSesion {

    /**
     * Objeto del tipo controlador persistencia que nos servirá para crear 
     * las instancias de las diferentes entidades.
     */
    private ControladorPersistencia contP;
    /**
     * Objeto del tipo de controlador Socio que nos servirá para crear las
     * instancias correspondientes a la gestión de los socios
     */
    private ControladorSocio contSocio;
    /**
     * Objeto del tipo de controlador apadrinamiento que nos servirá para crear las
     * instancias correspondientes a la gestión de los apadrinamientos
     */
    private ControladorApadrinamiento contApadrinamiento;
    /**
     * Objeto del tipo de controlador proyecto que nos servirá para crear las
     * instancias correspondientes a la gestión de los proyectos
     */
    private ControladorProyectoSC contProy;
    /**
     * Objeto del tipo de controlador Padrino que nos servirá para crear las
     * instancias correspondientes a la gestión de los padrinos.
     */
    private ControladorPadrino contPadrino;
    /**
     * Objeto del tipo de controladorVoluntario que nos servirá para crear las
     * instancias correspondientes a la gestión de los voluntarios.
     */
    private ControladorVoluntario contVoluntario;
    /**
     * Objeto de tipo ControladorIndice que nos servirá para crear las 
     * instancias correspondientes al menu de la página.
     */
    private ControladorIndice contIndice;
    /**
     * Objeto de tipo ControladorUsuario que nos servirá para crear las 
     * instancias correspondientes a la gestión de usuarios.
     */
    private ControladorUsuario contUsuario;
    /**
     * Objeto de tipo ControladorConfiguracion que nos servirá para realizar la 
     * configuración de la apliación.
     */
    private ControladorConfiguracion contConfiguracion;
    /**
     * Objeto de tipo TareasAutomaticas que permitirá ejecutar tareas que
     * debeb¡n realizarse de manera automática.
     */
    private TareasAutomaticas tareas;

   /**
     * Constructor de la clase.
     * @param blnUsuario Booleano que indica si hay que crear las tareas 
     * automáticas
     */
    public ControladorSesion(boolean blnUsuario) {
        contP = new ControladorPersistencia();
        contSocio = new ControladorSocio(contP, this);
        contApadrinamiento = new ControladorApadrinamiento(contP, this);
        contProy = new ControladorProyectoSC(contP, this);
        contPadrino = new ControladorPadrino(contP, this);
        contVoluntario = new ControladorVoluntario(contP, this);
        contIndice = new ControladorIndice(contP, this);
        contUsuario = new ControladorUsuario(contP, this);
        contConfiguracion = new ControladorConfiguracion(contP, this);
        if (blnUsuario) {
            tareas = TareasAutomaticas.obtenerInstancia();
        }
    }

    /**
     * Método que conectará con la base de datos.
     * @param prueba variable que indica si tenemos que conectar con la
     * base de datos de prueba o no.
     * @return true si la conexión se ha realizado con exito, sino devolverá 
     * false
     */
    public boolean conectarBD(boolean prueba) {
        if (contP.conectarBaseDatos(prueba)) {
            contP.registrarJPAControladores();
            return true;
        } else {
            return false;
        }
    }

    /**
     * Método que devuelve el controlador del socio.
     * @return contrladorSocio 
     */
    public ControladorSocio getControladorSocio() {
        return contSocio;
    }

    /**
     * Método que devuelve el controlador del apadrinamiento.
     * @return  controladorApadrinamiento.
     */
    public ControladorApadrinamiento getControladorApadrinamiento() {
        return contApadrinamiento;
    }

    /**
     * Método que devuelve el controlador de proyectos.
     * @return contProy
     */
    public ControladorProyectoSC getControladorProyectoSC() {
        return contProy;
    }

    /**
     * Método que devuelve el controlador de parinos.
     * @return contPadrino
     */
    public ControladorPadrino getControladorPadrino() {
        return contPadrino;
    }

    /**
     * Método que devuelve el controlador de voluntarios.
     * @return contPadrino
     */
    public ControladorVoluntario getControladorVoluntario() {
        return contVoluntario;
    }

    /**
     * Método que devuelve el controlador de indice.
     * @return contIndice
     */
    public ControladorIndice getControladorIndice() {
        return contIndice;
    }

    /**
     * Método que devuelve el controlador de usuario.
     * @return contUsuario.
     */
    public ControladorUsuario getControladorUsuario() {
        return contUsuario;
    }

    /**
     * Método que devuelve el controlador de configuración.
     * @return contUsuario.
     */
    public ControladorConfiguracion getControladorConfiguracion() {
        return contConfiguracion;
    }

    /**
     * Método que devuelve el controlador de persistencia.
     * @return contUsuario.
     */
    public ControladorPersistencia getControladorPersistencia() {
        return contP;
    }

    /**
     * Método que devuelve el valor de la variable tareas.
     * @return tareas
     * @see #setTareas
     */
    public TareasAutomaticas getTareas() {
        return tareas;
    }

    /**
     * Método que asigna un nuevo valor al controlador de apadrinamiento.
     * @param contApadrinamiento Nuevo valor de la variable
     */
    public void setContApadrinamiento(ControladorApadrinamiento contApadrinamiento) {
        this.contApadrinamiento = contApadrinamiento;
    }

    /**
     * Método que asigna un nuevo valor al controlador de configuración.
     * @param contConfiguracion Nuevo valor de la variable
     */
    public void setContConfiguracion(ControladorConfiguracion contConfiguracion) {
        this.contConfiguracion = contConfiguracion;
    }

    /**
     * Método que asigna un nuevo valor al controlador de indice.
     * @param contIndice Nuevo valor de la variable
     */
    public void setContIndice(ControladorIndice contIndice) {
        this.contIndice = contIndice;
    }

    /**
     * Método que asigna un nuevo valor al controlador de persistencia.
     * @param contP Nuevo valor de la variable
     */
    public void setContP(ControladorPersistencia contP) {
        this.contP = contP;
    }

    /**
     * Método que asigna un nuevo valor al controlador de padrino.
     * @param contPadrino Nuevo valor de la variable
     */
    public void setContPadrino(ControladorPadrino contPadrino) {
        this.contPadrino = contPadrino;
    }

    /**
     * Método que asigna un nuevo valor al controlador de proyecto.
     * @param contProy Nuevo valor de la variable
     */
    public void setContProy(ControladorProyectoSC contProy) {
        this.contProy = contProy;
    }

    /**
     * Método que asigna un nuevo valor al controlador de socio.
     * @param contSocio Nuevo valor de la variable
     */
    public void setContSocio(ControladorSocio contSocio) {
        this.contSocio = contSocio;
    }

    /**
     * Método que asigna un nuevo valor al controlador de usuario.
     * @param contUsuario Nuevo valor de la variable
     */
    public void setContUsuario(ControladorUsuario contUsuario) {
        this.contUsuario = contUsuario;
    }

    /**
     * Método que asigna un nuevo valor al controlador de voluntario.
     * @param contVoluntario Nuevo valor de la variable
     */
    public void setContVoluntario(ControladorVoluntario contVoluntario) {
        this.contVoluntario = contVoluntario;
    }

    /**
     * Método que asigna un nuevo valor a las tareas.
     * @param tareas Nuevo valor de la variable
     * @see #getTareas
     */
    public void setTareas(TareasAutomaticas tareas) {
        this.tareas = tareas;
    }
    
    
}
